using UnityEngine;
using System.Collections;

public class QuestCreator
{
#region Singleton
    static private QuestCreator Instance = null;
    static public QuestCreator GetInstance()
    {
        if (Instance == null)
        {
            Instance = new QuestCreator();
        }
        return Instance;
    }
#endregion

    public int m_MaxQuestsAmount = 10;
    public Quest[] m_QuestsToAdd;

    private QuestCreator()
    {
        m_QuestsToAdd = new Quest[m_MaxQuestsAmount];
        for (int i = 0; i < m_MaxQuestsAmount; i++)
        {
            m_QuestsToAdd[i] = null;
        }
    }
    /// <summary>
    /// Crea un objetivo.
    /// </summary>
    /// <param name="priorityId">Orden del objetivo, todos los objetivos con el mismo numero se pueden hacer en cualquier orden.
    /// Para que se activen los objetivos se tienen que haber cumplido los de la prioridad anterior (los de prioridad 0 empiezan activos por default)</param>
    /// <param name="objectiveId">Identificador/nombre del objetivo</param>
    /// <param name="amount">Cantidad de veces que se tiene que hacer</param>
    /// <param name="text">Descripcion del objetivo</param>
    /// <param name="additionalInfo">Informacion adicional</param>
    /// <returns>Devuelve el objetivo que crea para poder guardarlo y preguntar si se termino para algo en especial.</returns>
    public Objective CreateObjective(int priorityId, string objectiveId, int amount, string text,string additionalInfo)
    {
        if (priorityId >= m_MaxQuestsAmount)
        {
            Debug.LogWarning("Priority exceeds max quest amount, using the max amount");
            priorityId = m_MaxQuestsAmount - 1;
        }

        if (m_QuestsToAdd[priorityId] == null)
        {
            //falta ver lo del texto despues
            m_QuestsToAdd[priorityId] = QuestSystem.GetInstance().Add("Quest " + priorityId, "");
        }
        return m_QuestsToAdd[priorityId].AddObjective(objectiveId, amount, text, additionalInfo);
    }

    /// <summary>
    /// Activa la primer quest y setea las relaciones. Se tiene que llamar una vez al principio del juego si o si.
    /// </summary>
    public void InitializeQuests()
    {
        if (m_QuestsToAdd[0] == null)
        {
            Debug.LogError("No hay ninguna quest con prioridad 0");
            return;
        }
        Quest father = null;
        //Seteo la relacion padre/hijo entre las quests que hayan en el array sin importar que haya nulls en el medio.
        for (int i = 0; i < m_QuestsToAdd.Length; i++)
        {
            if (father == null)
            {
                if(m_QuestsToAdd[i] != null)
                father = m_QuestsToAdd[i];
            }
            else if (m_QuestsToAdd[i] != null)
            {
                m_QuestsToAdd[i].SetParent(father);
                father = m_QuestsToAdd[i];
            }
        }

        QuestSystem.GetInstance().Active(m_QuestsToAdd[0]);
    }
    /// <summary>
    /// Setea la instancia estatica en null.
    /// </summary>
    public void ResetInstance()
    {
        Instance = null;
    }

}
